import { readdirSync, readFileSync, writeFileSync } from 'fs';
import { join, resolve } from 'path';
import semver from 'semver'; // 用于处理版本兼容（需安装：npm install semver --save-dev）

// 拉取的项目存放根目录（根据你的配置修改，即repo.config.js中dir的上级目录）
const PROJECTS_DIR = resolve(process.cwd(), 'src/renderer/src/exports');
// 框架的package.json路径
const FRAMEWORK_PACKAGE_JSON = resolve(process.cwd(), 'package.json');

// 读取框架现有依赖
const frameworkPkg = JSON.parse(readFileSync(FRAMEWORK_PACKAGE_JSON, 'utf-8'));
const frameworkDeps = frameworkPkg.dependencies || {};
const frameworkDevDeps = frameworkPkg.devDependencies || {};

// 遍历所有拉取的项目
readdirSync(PROJECTS_DIR, { withFileTypes: true }).forEach((dirent) => {
  if (dirent.isDirectory()) {
    const projectDir = join(PROJECTS_DIR, dirent.name);
    const projectPkgPath = join(projectDir, 'package.json');

    // 检查项目是否有package.json
    try {
      const projectPkg = JSON.parse(readFileSync(projectPkgPath, 'utf-8'));
      const projectDeps = projectPkg.dependencies || {};
      const projectDevDeps = projectPkg.devDependencies || {};

      // 合并生产依赖（dependencies）
      Object.entries(projectDeps).forEach(([pkg, version]) => {
        if (!frameworkDeps[pkg]) {
          // 框架中没有该依赖，直接添加
          frameworkDeps[pkg] = version;
        } else {
          // 框架已有该依赖，检查版本兼容性，取兼容范围最大的版本
          const frameworkVersion = frameworkDeps[pkg];
          if (!semver.satisfies(version, frameworkVersion)) {
            // 版本不兼容，取两者的最大兼容版本（或强制用框架版本）
            console.warn(`⚠️ 依赖冲突：${pkg} 框架用${frameworkVersion}，项目${dirent.name}用${version}，已强制使用框架版本`);
            // 若想取更高版本，可改为：frameworkDeps[pkg] = semver.maxSatisfying([frameworkVersion, version], '*');
          }
        }
      });

      // 合并开发依赖（devDependencies）
      Object.entries(projectDevDeps).forEach(([pkg, version]) => {
        if (!frameworkDevDeps[pkg]) {
          frameworkDevDeps[pkg] = version;
        }
        // 开发依赖冲突可简化处理，直接用框架已有版本
      });

      console.log(`✅ 已提取项目 ${dirent.name} 的依赖`);
    } catch (err) {
      console.log(`ℹ️ 项目 ${dirent.name} 无package.json，跳过`);
    }
  }
});

// 更新框架的package.json
frameworkPkg.dependencies = frameworkDeps;
frameworkPkg.devDependencies = frameworkDevDeps;
writeFileSync(FRAMEWORK_PACKAGE_JSON, JSON.stringify(frameworkPkg, null, 2), 'utf-8');

console.log('\n🎉 依赖提取完成，已更新框架的package.json');
